# Q. What is this file?
# A. This file contains options which allow you to configure your multiworld experience while allowing
#    others to play how they want as well.
#
# Q. How do I use it?
# A. The options in this file are weighted. This means the higher number you assign to a value, the
#    more chances you have for that option to be chosen. For example, an option like this:
#
#    map_shuffle:
#      on: 5
#      off: 15
#
#    Means you have 5 chances for map shuffle to occur, and 15 chances for map shuffle to be turned
#    off.
#
# Q. I've never seen a file like this before. What characters am I allowed to use?
# A. This is a .yaml file. You are allowed to use most characters.
#    To test if your yaml is valid or not, you can use this website:
#        http://www.yamllint.com/
#    You can also verify that your Archipelago options are valid at this site:
#        https://archipelago.gg/check

# Your name in-game, limited to 16 characters.
#     {player} will be replaced with the player's slot number.
#     {PLAYER} will be replaced with the player's slot number, if that slot number is greater than 1.
#     {number} will be replaced with the counter value of the name.
#     {NUMBER} will be replaced with the counter value of the name, if the counter value is greater than 1.
name: Player{number}

# Used to describe your yaml. Useful if you have multiple files.
description: Default Kerbal Space Program 1 Template

game: Kerbal Space Program 1
requires:
  version: 0.6.7 # Version of Archipelago required for this yaml to work as expected.

Kerbal Space Program 1:
  ################
  # Game Options #
  ################
  progression_balancing:
    # A system that can move progression earlier, to try and prevent the player from getting stuck and bored early.
    # 
    # A lower setting means more getting stuck. A higher setting means less getting stuck.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 0
    # Maximum value is 99
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-0-99: 0 # random value between 0 and 99
    disabled: 0 # equivalent to 0
    normal: 50 # equivalent to 50
    extreme: 0 # equivalent to 99

  accessibility:
    # Set rules for reachability of your items/locations.
    # 
    # **Full:** ensure everything can be reached and acquired.
    # 
    # **Minimal:** ensure what is needed to reach your goal can be acquired.
    # 
    # **Items:** ensure all logically relevant items can be acquired. Some items, such as keys, may be self-locking, and
    # some locations may be inaccessible.
    # 
    # KSP1 note: **minimal** is the supported default.  Stricter modes
    # (items/full) force every progression item onto the conservative
    # physics ladder; a rare seed can fail the post-fill physics check
    # and need a reroll.
    full: 0
    minimal: 50
    items: 0

  exclude_locations:
    # Locations that are excluded from containing progression items by default.
    # 
    # Empty by default: missions the dv model can't verify from the active
    # home at the seed's difficulty (e.g. Eve surface returns) are gated via
    # the "all progression items collected" proxy rule (see
    # ``MODEL_INFEASIBLE_BASE`` in ``data/feasibility.py``).
    # That mechanism already prevents fill failures without taking the
    # locations out of the progression pool.
    # 
    # The previous Kerbin-shaped hardcoded default (Eve / Tylo / Laythe
    # returns) made non-Kerbin home configs trip over their own goal — a
    # Laythe-home ``jool_moons_return`` seed needs Tylo Return as a goal
    # target, but the default excluded it.  Failing early at gen time on
    # that mismatch (see ``_validate_goal_not_excluded`` in ``world.py``)
    # catches user errors more clearly than the previous fill-failure
    # symptom.
    []

  goal:
    # The victory condition for this run.
    # 
    # duna_return            -- Return a vessel (or crew) from Duna.
    # eeloo_return           -- Return a vessel (or crew) from Eeloo.
    # flag_every_body        -- Plant a flag on all 15 landable bodies (crewed).
    # standard_returns       -- Return from 11 bodies (excl. Eve, Tylo, Laythe).
    # standard_sample_returns -- Crewed sample return from the same 11 bodies.
    # complete_tech_tree     -- Purchase all 62 tech tree nodes with science.
    # mun_flag               -- Plant a flag on the Mun.
    # mun_sample_return      -- Crewed sample return from the Mun.
    # jool_moons_return      -- Return from each Jool moon (Laythe, Vall, Tylo,
    #                           Bop, Pol).  Home is filtered out, so a Laythe
    #                           start gives a tight 4-target Jool-system goal.
    # random_contracts       -- No destination goal: complete X of your available
    #                           contracts, then plant a flag at home to win. Only
    #                           valid with goal_contract_mode = count or
    #                           progressive_unlock.
    # custom                 -- Build a goal from the body-list options below.
    duna_return: 50
    eeloo_return: 0
    flag_every_body: 0
    standard_returns: 0
    standard_sample_returns: 0
    complete_tech_tree: 0
    mun_flag: 0
    mun_sample_return: 0
    jool_moons_return: 0
    random_contracts: 0
    custom: 0

  starting_body:
    # The celestial body whose surface the player launches from.  Mun /
    # Minmus / Laythe / etc. are landable bodies that the Selector mod
    # can spawn KSC at.  Jool and Kerbol are excluded — gas giant and
    # star, no surface.
    # 
    # Most existing goals still work from non-Kerbin homes (returns,
    # flag plants, sample returns are filtered for the new home).
    # Goals whose only target *is* the home body become unwinnable and
    # generation aborts with OptionError — e.g. ``mun_flag`` with
    # ``home = mun`` is rejected at gen time.
    # 
    # ``eve`` launches from the 6,140 m mesa pad (~8,996 m/s ascent);
    # heavy departures are lifted across up to three launches and docked
    # in Eve orbit (multi-launch assembly).  The deepest casual-margin
    # Return/Sample Return targets stay out of logic and route through the
    # proxy; comfortable/expert are fully in logic.  Expect the hardest
    # seeds in the game.
    # 
    # Default ``kerbin`` preserves the existing single-home behaviour.
    # 
    # Pool keys (resolved to a concrete body at generation time using the
    # seed RNG) are quick picks for randomized starts:
    # 
    # atmospheric -- Kerbin, Duna, Laythe.
    # standard    -- Kerbin, Duna, Laythe, Moho, Eeloo.
    # planets     -- Moho, Kerbin, Duna, Dres, Eeloo (planets only).
    # all         -- Every landable body except Eve (Eve is opt-in only via
    #                the explicit ``eve`` key).  Includes Tylo and Laythe;
    #                expect punishing seeds.
    # 
    # For custom weights, use the standard AP weighted-random YAML form
    # over the concrete body keys, e.g. ``kerbin: 40, duna: 20,
    # laythe: 40``.  Pool keys can be weighted the same way.
    bop: 0
    dres: 0
    duna: 0
    eeloo: 0
    eve: 0
    gilly: 0
    ike: 0
    kerbin: 50
    laythe: 0
    minmus: 0
    moho: 0
    mun: 0
    pol: 0
    tylo: 0
    vall: 0
    atmospheric: 0
    standard: 0
    planets: 0
    all: 0

  difficulty:
    # Sets pacing defaults: Tech Slots Per Node, Starting Inventory Count,
    # Science Safety Factor, and contract pacing — each overridable independently.
    # 
    # Delta-V margins and hardware strictness are NOT set here — those are the
    # Physics Difficulty option (which defaults to follow this).
    # 
    # casual  -- 20 starts, 4 tech slots/node, 50% science; physics 'generous'.
    # normal  -- 15 starts, 4 tech slots/node, 70% science; physics 'comfortable'.
    # expert  -- 10 starts, 3 tech slots/node, 85% science; physics 'small'.
    casual: 0
    normal: 50
    expert: 0

  tech_slots_per_node:
    # Number of AP location slots created per tech tree node (62 nodes total).
    # 
    # More slots = larger location pool, looser fill.  Fewer slots = tighter
    # item pool tension and faster progression pacing.
    # 
    # WARNING: Lowering this shrinks the location pool and can cause fill
    # failures on long goals (e.g. standard_sample_returns, flag_every_body).
    # If generation fails: reroll with a new seed, or raise this value, or
    # raise Starting Inventory Count to give the fill algorithm more room.
    # Short goals (mun_flag, duna_return) are unaffected.
    # 
    # auto -- Derived from Difficulty (casual/normal=4, expert=3).
    # 1..4 -- Explicit override.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 1
    # Maximum value is 4
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-1-4: 0 # random value between 1 and 4
    auto: 50 # equivalent to -1

  starting_inventory_count:
    # Number of zero-requirement bootstrap locations available at run start.
    # 
    # These auto-check on connect — the AP fill algorithm uses them to seed
    # your initial parts kit.  Higher = easier bootstrap, more wide-open
    # early game.  Lower = scarcer starts, tighter pacing.
    # 
    # The Progressive Launch Pad bonus (+3, capped at 20) still applies on
    # top of this when enabled.
    # 
    # WARNING: Lowering this shrinks the location pool and can cause fill
    # failures on long goals (e.g. standard_sample_returns, flag_every_body).
    # If generation fails: reroll with a new seed, or raise this value, or
    # raise Tech Slots Per Node to give the fill algorithm more room.
    # Short goals (mun_flag, duna_return) are unaffected.
    # 
    # auto  -- Derived from Difficulty (20/15/10).
    # 0..20 -- Explicit override.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 0
    # Maximum value is 20
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-0-20: 0 # random value between 0 and 20
    auto: 50 # equivalent to -1

  science_safety_factor:
    # Percentage of estimated accessible science counted toward tech tree gates.
    # 
    # The capability system estimates how much science the player could earn
    # from reachable bodies; this factor scales that estimate.  Lower = stricter
    # (tech tiers unlock later, more bodies must be reachable first).  Higher =
    # more permissive.  This is the single most impactful knob for tech tree
    # progression pacing.
    # 
    # Does NOT affect fill success — only tech tree gating.  Safe to tune.
    # 
    # auto    -- Derived from Difficulty (casual=50, normal=70, expert=85).
    # 0..100  -- Explicit percentage override.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 0
    # Maximum value is 100
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-0-100: 0 # random value between 0 and 100
    auto: 50 # equivalent to -1

  physics_difficulty:
    # Delta-V margins and hardware strictness used by the capability model.
    # 
    # This is the physics axis only — it does NOT touch tech-slot, starting-
    # inventory, science, or contract pacing (those follow Difficulty).  The
    # levels are hand-curated profiles, not a numeric dial: margins shrink while
    # other knobs (e.g. drag credit) move the other way, so there's no meaningful
    # value "between" two levels.
    # 
    # auto        -- Follow Difficulty (casual->generous, normal->comfortable,
    #                expert->small).  The default.
    # generous    -- Largest margins; most forgiving (casual physics).
    # comfortable -- Default margins (normal physics).
    # small       -- Tight margins (expert physics).
    # zero        -- No margin at all: every dv budget must close exactly, no
    #                plane-change cushion, lowest TWR floors.  "Fly it perfectly."
    #                Maps to no Difficulty — opt in deliberately.
    auto: 50
    generous: 0
    comfortable: 0
    small: 0
    zero: 0

  start_with_launch_clamps:
    # Start the run with Launch Clamps already collected.
    # 
    # Launch Clamps stabilize tall rockets on the pad.  They are not required
    # for any mission — the capability system never gates on them — but
    # enabling this gives the player access to one from the start of the run
    # instead of waiting for the part item.
    'false': 0
    'true': 50

  exclude_late_tech_tree:
    # Exclude tier-8 tech tree locations from containing progression items.
    # 
    # Tier-8 nodes require massive amounts of science to unlock.  Enabling this
    # prevents late-game science grind from being required to complete the seed.
    # Disable for Complete Tech Tree goal or challenge runs.
    'false': 0
    'true': 50

  progressive_launch_pad:
    # Gate buildable rocket launch mass through Progressive Launch Pad items.
    # 
    # Mirrors KSP career mode launch pad upgrades. The pool gets 3 copies and
    # collecting them raises the launch-mass cap through tiers
    # (100 → 200 → 500 → unlimited tonnes by default — see
    # PROGRESSIVE_LAUNCH_PAD_CAPS).
    # 
    # Creates a real progression gate on broad goals like Standard Sample
    # Returns — you can have all the parts but still need a bigger launch
    # pad before tackling Vall / Duna / heavy missions.
    # 
    # Disabling this option can result in more wide-open seeds where you can
    # sometimes reach all bodies at once after a small bootstrap kit. Leave
    # enabled if you want a sequential progression journey; disable if you
    # find the mass cap annoying.
    'false': 0
    'true': 50

  buildings_in_logic:
    # Gate capability-driving KSP facilities as in-logic progression.
    # 
    # When on (default), the curated facilities start at level 0 and the player
    # upgrades them by collecting building progressives.  When off, all facilities
    # are maxed similar to science sandbox, no facility gates anything:
    # 
    #   - **Astronaut Complex** gates EVA.  Until upgraded, planting a flag and EVA
    #     in orbit are out of logic on EVERY body incl. home, as are rescues and
    #     surface samples away from home; only plain home-surface EVA works at
    #     level 0.
    #   - **Research & Development** gates surface samples (needs the R&D facility
    #     even on the home body) *and* the science-cost cap — how expensive a tech
    #     node you may buy.  Its level rides the Progressive R&D count on a
    #     ``(2, 4)`` schedule (samples + mid cap at the 2nd copy, max at the 4th),
    #     placed so the cap never binds before the tech band does.
    #   - **Tracking Station** gates the Deep Space Network comms range (a weaker
    #     DSN needs a stronger antenna, so far uncrewed missions and far science
    #     transmission require upgrading it) *and* patched conics (L2), a
    #     prerequisite for navigation.
    #   - **Mission Control** gates maneuver nodes (L2) — with conics, this is what
    #     lets you plan rendezvous and transfers.  Rendezvous (rescue, docking) and
    #     interplanetary transfers need both; home-system (moon) transfers scale
    #     with difficulty (see ``HomeSystemConics`` / ``HomeSystemNodes``).
    # 
    # The VAB/SPH buildable limits are wired end-to-end but ship maxed this
    # release; their part-count gate is a follow-up.
    'false': 0
    'true': 50

  home_system_conics:
    # Whether home-system (moon) transfers require patched conics.
    # 
    # Patched conics (Tracking Station L2) let you see an encounter before you
    # commit the burn.  Interplanetary transfers and rendezvous always need them;
    # this option only covers transfers to the home body's own moons, which a
    # skilled pilot can eyeball.  Only matters when ``buildings_in_logic`` is on.
    # 
    # auto         -- follow Difficulty (casual: required, normal: required,
    #                 expert: not required).  The default.
    # required     -- home-system transfers always need conics.
    # not_required -- home-system transfers never need conics.
    auto: 50
    required: 0
    not_required: 0

  home_system_nodes:
    # Whether home-system (moon) transfers require maneuver nodes.
    # 
    # Maneuver nodes (Mission Control L2, plus conics) let you plan a precise burn.
    # Interplanetary transfers and rendezvous always need them; this option only
    # covers transfers to the home body's own moons.  Only matters when
    # ``buildings_in_logic`` is on.
    # 
    # auto         -- follow Difficulty (casual: required, normal: not required,
    #                 expert: not required).  The default.
    # required     -- home-system transfers always need nodes (and conics).
    # not_required -- home-system transfers never need nodes.
    auto: 50
    required: 0
    not_required: 0

  contract_type_weights:
    # Relative weight of each contract mission type in the non-goal contract pool.
    # 
    # Contracts are paced into the run as items; completing one (a native KSP
    # contract injected by the client) checks an AP location. A weight of 0
    # disables that type entirely. Weights are relative — {"mine_ore": 2} alone
    # behaves the same as {"mine_ore": 1}; mixing types biases the random pick.
    # 
    # Only ever-achievable (type, body) combinations are placed.
    equatorial_orbit: 1
    flag_plant: 1
    kerbal_rescue: 1
    mine_ore: 1
    orbit: 1
    polar_orbit: 1
    random_orbit: 1
    sample_return: 1
    space_station: 1
    stationary_orbit: 1
    surface_base: 1
    transmit_science: 1

  contracts_available:
    # Total number of ordinary (non-goal) contracts placed into the seed.
    # Independent of the goal; goal contracts are separate.
    # 
    # Capped at the number of ever-achievable (enabled-type, body) combinations
    # available in the seed, so a high value may yield fewer in practice.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 0
    # Maximum value is 40
    10: 50
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-0-40: 0 # random value between 0 and 40

  contracts_required_for_goal:
    # Completed non-goal contracts (X) required before the goal contract item(s)
    # are awarded. Read only by goal_contract_mode = count / progressive_unlock;
    # ignored by findable / starting.
    # 
    # auto  -- ceil(0.8 * contracts actually generated).
    # 0..40 -- Explicit. Must not exceed Contracts Available; clamped down to the
    #          number of contracts actually generated this seed.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 0
    # Maximum value is 40
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-0-40: 0 # random value between 0 and 40
    auto: 50 # equivalent to -1

  goal_contract_mode:
    # How the goal contract item(s) reach the player.
    # 
    # findable           -- goal contract item is in the multiworld item pool,
    #                       found like any other item.
    # starting           -- goal contract item(s) are precollected as EXTRA
    #                       starting items; you are limited only by physics, parts,
    #                       and buildings.
    # count              -- (default) complete X of your Y available contracts; on
    #                       hitting X all goal contract items are awarded at once.
    # progressive_unlock -- complete contracts to unlock the goal contract items
    #                       one at a time (easiest goal mission first), the last
    #                       at X.
    findable: 0
    starting: 0
    count: 50
    progressive_unlock: 0

  allow_missions_harder_than_goal:
    # Allow contracts whose mission is harder than your goal mission.
    # 
    # On (default): the full ever-achievable contract range is eligible, so a
    # contract can be significantly harder than the goal and (once goals are
    # contracts) can even end up gating your goal. Off: contracts are capped at
    # the goal's difficulty — e.g. a Duna-return goal won't hand you a Tylo mining
    # contract. Difficulty is compared by intrinsic mission delta-v.
    # 
    # Independent of the home-system-local invariant: a home-local goal (e.g.
    # Mun flag) never gets out-of-system contracts regardless of this setting.
    'false': 50
    'true': 0

  allow_eve_on_expert:
    # Allow Eve surface return / sample-return missions as goals and contracts.
    # 
    # Off (default): Eve return and sample-return are excluded everywhere as a
    # deliberate curation choice — they're physically achievable but tedious to
    # fly, so they never become a goal target or a contract. On: they become
    # available, but ONLY when base Difficulty is expert — independent of Physics
    # Difficulty (so a 'zero' physics run on a casual/normal base never surfaces
    # Eve).
    'false': 50
    'true': 0

  home_contract_floor:
    # Minimum number of home-body contracts guaranteed in the seed, regardless of
    # the ordinary contract selection.
    # 
    # Home-body contracts are the earliest-reachable locations in a run, so this
    # floor guarantees the item fill always has enough early slots to assemble a
    # deep goal's kit. Without it, far-home / broad-goal seeds can rarely run out
    # of reachable early slots and strand a progression item (an unsolvable seed).
    # The floor draws from whatever home-safe contract types are available — so it
    # stays generic as new contract types are added — and picks them randomly each
    # seed, so it adds slack without making starts samey.
    # 
    # 0 = off (no guarantee). Counts toward the contract pool; does not raise the
    # per-contract reward-slot count.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 0
    # Maximum value is 20
    5: 50
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-0-20: 0 # random value between 0 and 20

  body_visibility_mode:
    # Which celestial bodies start HIDDEN, revealed only as you receive
    # "Discover <Body>" items (ResearchBodies-style).
    # 
    # auto         -- (default) pick a sane mode from the goal: a goal confined to
    #                 your home system hides EVEN the home system (home_only, so
    #                 you discover your own neighbourhood progressively); any wider
    #                 goal hides everything OUTSIDE the home system (home_system).
    # all_visible  -- feature off: every body visible from the start, exactly as
    #                 before. No Discover items are added.
    # home_system  -- your home body and the rest of its local system are visible;
    #                 every other body is hidden until discovered.
    # home_only    -- only your home body is visible; everything else — including
    #                 the rest of your home system — is hidden until discovered.
    # 
    # A hidden body's missions/contracts require its Discover item (logic-gated in
    # both AllowUndiscoveredBodies settings). Parent planets are discovered before
    # their moons. Your home body and the Sun are never hidden.
    auto: 50
    all_visible: 0
    home_system: 0
    home_only: 0

  allow_undiscovered_bodies:
    # Whether an undiscovered body's sphere still physically exists in-game.
    # 
    # On (default): a hidden body renders but is uninteractable — no map label,
    # not clickable, not Tab-selectable. You can still fly a probe there out of
    # logic; arriving reveals it locally. Off: a hidden body is fully invisible
    # (its sphere is removed); flying into its SOI destroys the craft, so you can
    # only reach what you have discovered.
    # 
    # Only meaningful when Body Visibility Mode is not all_visible; the generation
    # logic requires the Discover item either way.
    'false': 0
    'true': 50

  flag_bodies:
    # Bodies to plant flags on (custom goal). Leave empty for preset goals.
    []

  return_bodies:
    # Bodies to return from (custom goal). Leave empty for preset goals.
    []

  sample_return_bodies:
    # Bodies to sample-return from (custom goal). Leave empty for preset goals.
    []

  orbit_bodies:
    # Bodies to reach orbit around (custom goal). Leave empty for preset goals.
    []

  flyby_bodies:
    # Bodies to perform a flyby of (custom goal). Leave empty for preset goals.
    []

  enabled_part_packs:
    # Optional part packs to include in the seed. Stock parts are always
    # available; enable the DLC/expansion packs you own here (disable a pack to
    # leave its parts out of the run). Defaults to every shipped optional pack.
    ['MakingHistory']

  ###########################
  # Item & Location Options #
  ###########################
  local_items:
    # Forces these items to be in their native world.
    []

  non_local_items:
    # Forces these items to be outside their native world.
    []

  start_inventory:
    # Start with the specified amount of these items. Example: "Bomb: 1"
    {}

  start_hints:
    # Start with these item's locations prefilled into the ``!hint`` command.
    []

  start_location_hints:
    # Start with these locations and their item prefilled into the ``!hint`` command.
    []

  priority_locations:
    # Prevent these locations from having an unimportant item.
    []

  item_links:
    # Share part of your item pool with other players.
    []

  plando_items:
    # Generic items plando.
    []
